{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style='background-image: url(\"../../share/images/header.svg\") ; padding: 0px ; background-size: cover ; border-radius: 5px ; height: 250px'>\n",
    "    <div style=\"float: right ; margin: 50px ; padding: 20px ; background: rgba(255 , 255 , 255 , 0.7) ; width: 50% ; height: 150px\">\n",
    "        <div style=\"position: relative ; top: 50% ; transform: translatey(-50%)\">\n",
    "            <div style=\"font-size: xx-large ; font-weight: 900 ; color: rgba(0 , 0 , 0 , 0.8) ; line-height: 100%\">Computational Seismology</div>\n",
    "            <div style=\"font-size: large ; padding-top: 20px ; color: rgba(0 , 0 , 0 , 0.5)\">Interpolation with Lagrange Polynomials</div>\n",
    "        </div>\n",
    "    </div>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p style=\"width:20%;float:right;padding-left:50px\">\n",
    "<img src=../../share/images/book.jpg>\n",
    "<span style=\"font-size:smaller\">\n",
    "</span>\n",
    "</p>\n",
    "\n",
    "\n",
    "---\n",
    "\n",
    "This notebook is part of the supplementary material \n",
    "to [Computational Seismology: A Practical Introduction](https://global.oup.com/academic/product/computational-seismology-9780198717416?cc=de&lang=en&#), \n",
    "Oxford University Press, 2016.\n",
    "\n",
    "\n",
    "##### Authors:\n",
    "* Florian Wölfl ([@flo-woelfl](https://github.com/flo-woelfl))\n",
    "* Stephanie Wollherr ([@swollherr](https://github.com/swollherr))\n",
    "* Heiner Igel ([@heinerigel](https://github.com/heinerigel))\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can approximate an arbitrary function $f(x)$ using the interpolation with Lagrange polynomials $l_i$ at given collacation points $x_i$, i.e.\n",
    "\n",
    "\\begin{eqnarray*}\n",
    "f(x) = \\sum f(x_i) \\cdot l_i(x).\n",
    "\\end{eqnarray*}\n",
    "\n",
    "The Lagrange polynomials at $x$ are defined as follows:\n",
    "\n",
    "$$ \\ell_i^{(N)} (x) \\ := \\ \\prod_{k = 1, \\ k \\neq i}^{N+1} \\frac{x - x_k}{x_i-x_k}, \\qquad   i = 1, 2, \\dotsc , N + 1  $$\n",
    "\n",
    "\n",
    "They are implemented in Python with the following code:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "code_folding": [
     0
    ],
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Setup\n",
    "%matplotlib inline\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from gll import gll\n",
    "\n",
    "# Prettier plots.\n",
    "plt.style.use('ggplot')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfUAAADXCAYAAAADW8iYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VFX++PH3vZPMpE16L4TQk0DoTWoQEMSC+v2hK7pi\nWcu6q1hXRWmCrivoqutaUayrrHV3FQslAUKAAAkloQdCOqSRnszMPb8/ItFQEzKZkpzX8/A8zOTe\nez6TM5nPnHNPUYQQAkmSJEmSnJ5q7wAkSZIkSbIOmdQlSZIkqZOQSV2SJEmSOgmZ1CVJkiSpk5BJ\nXZIkSZI6CZnUJUmSJKmTkEldkpxITk4OqqqyefNme4fSaomJidx9991tOicmJobnnnuugyJqYrFY\nuOOOOwgMDESn07Fhw4YOLQ8gOTkZVVUpKCjo8LKkrkkmdclqbr/9dqZOnWrvMBzWokWLUFUVnU6H\nTqcjMjKSm2++mePHj7fpOoqidFCEHePrr7/mpZdesncYZ/nyyy/57LPP+O677ygsLOSyyy6zSbm2\nqr+FCxeiqmqbv1BJzk0mdcnpmUwme4fQajExMRQVFZGfn89HH33E9u3bufbaa2nLGlDOtl6Ur68v\nXl5e9g7jLAcPHiQiIoKRI0cSHByMi4uL1a5tNputdq0zCSHQNO2Cx6xbt44PP/yQgQMHdlgckmOS\nSV2ymX/961+MGjUKX19fgoKCuOqqqzh06FCLY9LT0xk9ejTu7u7Exsby9ddfn9UVq6oqr732GrNn\nz8bX15ff//73ADz99NPExcXh6elJt27duO+++6isrGw+74MPPsDV1ZXNmzczdOhQPD09GTZsGNu3\nb28Rw9q1a0lISMDd3Z0hQ4awadMmVFXl008/bT7mxIkTzJkzh+DgYLy9vRk3bhwbN2686O9Ap9MR\nFBREaGgoiYmJLFy4kN27d3PkyBEAioqKuOmmm/Dz88PDw4PExER27Nhx3uslJiZyzz33nPV8z549\nWbp0KdDUgzJlyhTeeecdunfvjo+PD9deey0nT55scc4HH3xAfHw8BoOBqKgonnnmGSwWS4uy7rrr\nLp555hlCQkLw8/PjmWeeQQjB4sWLCQ0NJTg4mKeffvqsGH/bWlyzZg2JiYkEBATg6+vLxIkTSUtL\nu+Dv7dtvv2XIkCF4enri5+fHqFGj2LVr1wXPWbZsGT179sRgMNCrVy9eeeWVFjHNnz+f7OxsVFWl\nR48e573OwYMHmTFjBkajEaPRyDXXXNNcX6d/b66uriQlJTFkyBDc3NxYu3YtAK+99hpRUVF4enoy\nffr0c/bK7NixgyuuuAKj0UhwcDA33HBDi+MWLVpE7969WbVqFbGxsRgMhrP+bn6ruLiY2267jY8/\n/hhfX98L/o6kzkcmdclmGhsbeeaZZ8jIyGDNmjW4uLgwY8aM5lZNXV0dM2bMICQkhO3bt/PBBx+w\nbNmys5IPwOLFixkzZgzp6eksWbIEAA8PD95991327dvHBx98QHJyMg8++GCL8zRN46mnnuK1114j\nPT2d4OBgbrzxxuaWT0FBAddccw2jR48mPT2d5cuXM3fu3BZdpvX19SQmJlJbW8uPP/5IRkYGV155\nJVOnTuXAgQNt+p24ubk1/24Arr32Wg4ePMj3339PWloaISEhTJkyhbKysnOef8899/DZZ59RW1vb\n/NzatWvJzc3lrrvuan4uLS2NpKQkvv/+e3766Sf27NnDo48+2vzz7777jjvvvJPbbruNzMxMXnrp\nJV5//XUWL17corwvv/wSs9lMSkoKL7/8MkuXLmXGjBnU1tayadMmli1bxnPPPcePP/543tdcXV3N\n/fffz9atW0lNTaVPnz5MmzaN8vLycx5fXFzMrFmzmD17NllZWWzZsoW5c+desGX9+uuvs2DBAp56\n6imysrJ4/PHHeeKJJ3j//feBplsCjzzyCN27d6e4uPi8Xyrq6+uZMmUKjY2NbNy4kQ0bNlBdXc30\n6dNbtMY1TeOJJ57g5ZdfZv/+/QwbNoxvv/2Whx9+mEcffZRdu3Yxa9YsHnvssRbXz8rKYuLEiYwZ\nM4adO3eyfv16XFxcmss8raCggDfeeIMPP/yQrKwsIiMjzxmvEIJbbrmF++67z2a3EyQHIyTJSubM\nmSOmTJnS6uNLS0uFoihi8+bNQggh3n77bWE0GkVVVVXzMfv37xeKooilS5c2P6coivjDH/5w0et/\n/fXXws3NrfnxypUrhaqqIiMjo/m5rVu3ClVVxcGDB4UQQjz11FMiJiZGaJrWfMwPP/wgFEURn3zy\niRBCiPfff19ERUUJi8XSorxJkyaJhx566LzxLFy4UPTu3bv5cU5OjhgxYoTo3r27MJvNYs2aNUJV\nVbF///7mYxoaGkRYWJh49tlnhRBCHDt2TCiKIlJSUpp/HhQUJFasWNF8zu9+9zsxc+bM5sdz5swR\n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\nRPnjPD78djP7e7jz7Iy+uLvK77BSxxgdZUSzaKxZV0lsoDvjJhhlQu8kuvcykH2ggfJSM34B506Z\n2dnZ6HQ6unWz/3Li7U7qmqaxYsUK5s+fj5+fH08++STDhw8nIiKi+Zja2lpWrFjB008/jb+/P5WV\nle0t1qpE3lHE4SzU2x+0dyiSFf27LpAdMaN5NuUlPAY8BL3i7B2S1EkJTeBW6EK0j4EPyk/Qs8ZA\npLdcibIz0OkU+sS7cWBvPaMmnL3JkxCCrVu3MnLkSIeY3dDupsvhw4cJCwsjKCgIFxcXxowZQ1pa\nWotjNm3axMiRI/H39wfA29u7vcValfj+C5Qp16IY5JrfncW3+8pIOnqKxdN743P7H9H++Tzi6CF7\nhyV1QkIIdu+oo6FeMPVyH24eFMjCtbmcqLb+/tySfUR111N1ykJF2dmbvWRnZ6MoCj169LBDZGdr\nd1IvKytrMXzf39+fsrKyFscUFBRQXV3NokWLePLJJ9mwoX3rdVuTKC5A7NuFMmGavUORrGT1wXL+\nd6CcxZd3w8/dBSV+MOptf0Z7bTEi96i9w5M6ESEEmRn1VJ2yMGKsJzoXhck9fbk21p/5645TXtcx\n27ZKtqXqFHr2c+NQVstV5hytlQ5Wuqd+MZqmcfToUebPn09DQwNPP/00ffr0ITQ09KxjMzMzyczM\nbH48a9YsjEZjh8VW+8m3KFdch3tQSIeV0VXp9foOrbtz+elgCV9mlfHSNf2I8PlNz8vYy2l00VH3\n6iI8n3kJXUS0TeNyRvaoP2eze8cpyks0Js8IRW/4tY1083AjFtWVxUn5vHRNP7xtvAyxrDvrix/o\nyX8+L8RidsPXr2mfiP379+Pi4kJCQoLVk/qqVat+LTs+nvj4+Fad1+53mr+/PyUlJc2Py8rKmrvZ\nf3uM0WhEr9ej1+uJjY3l2LFj50zq5wq+qqqqvWGekyg9iZa2CXXpm5g7qIyuzGg0dljdncvm45W8\nnVbMs5O74a2aqKo6o/szfihcfxtVzz6C+thSlOBwm8XmjGxdf87myP56crIbGTPJi4bGGhrO2Jn1\n2t5elFfX8fh/97HoctvOvJB11zG699Kza3spQ0Z5IoQgOTmZUaNGUV1dbdVyjEYjs2bNuqRz2939\n3qtXL4qKijh58iRms5mUlJSzhvUPHz6c/fv3o2kaDQ0NHDp0iMjIyPYW3W7ip69Rxk5G8ZTfaJ3d\n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\n7hnXa45b1Ht6esjO/mRrTFZWFs3NzRc9p6enZ9SiXr1Ep7hkYhIczBYsFgMVVVaKyw20nunlZHMb\ne/f24tf7iGh9XGWK8NJzA9hstiFBVgUFBYnnl7L+KkleDAZDwubnin0kEsHj8dDd3U1HRwcfd3fj\ny1+AI6Rh/fmvEM4rWXhNCfMWFEhBl1wSq8rTMWoR/udr25njP8a1A53ULF+O4Z/+GSXNPt3dm3Eo\n+UUY7nsc5Y+/RWlrBsZeuGzG+bGbmppoampKPN+4cSN/3PJbTCYTpaWlFBcXk5+fj8vlmvZ9v1PB\noEv10+5xn89HT08PwWAwPmE7nXSaDVgVB3Mt5VjMDq5cnU/V/AzMlulxmVoslllV+3i24XA4yMnJ\nYf78T1x9vd4w27ecIDpwBvPptzkYyuWdnYKcnBwKCwsTLTs7O+G6l8w8pnPsae1n6Pj9b2k900lN\nWgbv5qzi2lsW4pwzcl4ECXTedCtv/eYw/wi8/PLLiZ9XV1dTXT06oR+3KmZlZeHxeBLPe3p6ziuR\nl5WVhdfrTTz3er0XLKM3XOfnrNlAjVOnra2NlpYW6uvrE+57l8tFdnY2mZmZZGZm4nA4kmayGQx6\nGtynPRjx3N/fn4h6DgQCpKWl4XA4EgFp2dnZVFRU4HQ6sdvthFTB5nfbcDqN3LaiEKMCPd0ap5oj\nNDW0U1RqpnyuFUfG1G4JkWvqyYMQgjMn44Go86/Ko2xOCXZ1Kf0/+QFqMID3hutxqzrHjx9n165d\nBAIBXC4XeXl5ieZwOC57d+pMYarHntA0+Lie8Pbfsy+gciizkOXX30jNdStY2Rth044zdPcH+ezc\n2VttbbyouuDRt8+wamH8M9q4ceOYXmfcoj537lw6Ozvp7u4mMzOT3bt3c9dddw05p7a2lj/+8Y+s\nWLGCY8eOYbPZLqmU3nP7u3nic2VcddVVXHXVVUB8L7TH48HtdtPT08Pp06fx+XyJO9f09HTsdvuQ\nZrPZElm+TCbThE9Ag9uRzs14dm47V8AHE6xYLBZsNluiORwOSkpKEiJut9tHDErrDsTYtL2VhXmp\nfGVJXqLaWrbLRLbLRCioc+ZkhD07/NjTjVRUWcgrNEt3qiRBMKDz8YdBImHBynV2HOnx75shKwfD\n3Y9g3vEH8p77F/L/+laUz/wFisFAOBzG7XbT1dXFkSNHeOedd1AUhfz8fAoKChJxNpeDN+1yRvT3\n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\n4f8HJlMUSQg4sAYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x103e02470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def lagrange2(N, i, x, xi):\n",
    "    \"\"\"\n",
    "    Function to calculate  Lagrange polynomial for order N\n",
    "    and polynomial i [0, N] at location x at given collacation points xi\n",
    "    (not necessarily the GLL-points)\n",
    "    \"\"\"\n",
    "    fac = 1\n",
    "    for j in range(-1, N):\n",
    "        if j != i:\n",
    "            fac = fac * ((x - xi[j + 1]) / (xi[i + 1] - xi[j + 1]))\n",
    "    return fac\n",
    "\n",
    "N = 4\n",
    "x = np.linspace(-1, 1, 1000)\n",
    "xi, _ = gll(N)\n",
    "\n",
    "plt.figure(figsize=(8, 3))\n",
    "for _i in range(N):\n",
    "    plt.plot(x, lagrange2(N, _i, x, xi))\n",
    "plt.ylim(-0.3, 1.1)\n",
    "plt.title(\"Lagrange Polynomials of order %i\" % N)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Exercises:\n",
    "\n",
    "### 1. The GLL-points\n",
    "* Use the `gll()` routine to determine the collocation points for a given order $N$ in the interval $[-1,1]$.\n",
    "* Define an arbitrary function $f(x)$ and use the function `lagrange(N,i,x)` to get the $i$-th Lagrange polynomials of order N at the point x.\n",
    "* Calculate the interpolating function to $f(x)$.\n",
    "* Show that the interpolation is exact at the collocation points.\n",
    "* Compare the original function $f(x)$ and the interpolating function on a finely spaced grid. Vary the order of the interpolating polynomials and calculate the error as a function of order.\n",
    "\n",
    "\n",
    "### 2. Equidistant collocation points and the Runge function\n",
    "In the first exercise we used the GLL-points that are not equidistant.\n",
    "Now use equidistant collacation points for the interpolation of your function $f$. Compare the two results.\n",
    "\n",
    "Change the code for the Runge-function on the interval $[-5,5]$\n",
    "\n",
    "$$ f(x)=\\frac{1}{(1+x^2)} $$\n",
    "\n",
    "What do you notice when you decrease the order of your interpolation?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Give polynomials degree (N): 5\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109820b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# CHOOSE THE EXERCISE\n",
    "exercise = 1\n",
    "\n",
    "# Exercise 1\n",
    "if exercise == 1:\n",
    "    # Initialize space in the interval [-1, 1]\n",
    "    nx = 1000\n",
    "    x = np.linspace(-1, 1, nx)\n",
    "    \n",
    "    # CHANGE FUNCTION HERE. Currently a simple sine function.\n",
    "    f = np.sin(np.pi * x)\n",
    "    \n",
    "# Exercise 2\n",
    "elif exercise == 2:\n",
    "    # Initialize space in the interval [-5, 5]\n",
    "    nx = 1000\n",
    "    x = np.linspace(-5, 5, nx)\n",
    "    # CHANGE FUNCTION HERE. Currently the Runge function.\n",
    "    f = 1/(1 + x ** 2)\n",
    "\n",
    "# Get order of Lagrange polynomial\n",
    "N = int(input(' Give polynomials degree (N): '))\n",
    "\n",
    "\n",
    "if exercise == 1:\n",
    "    # Get collocation points xi from gll routine   \n",
    "    [xi, w] = gll(N)\n",
    "    fi = np.interp(xi, x, f) \n",
    "elif exercise == 2:\n",
    "    xi = np.linspace(-5, 5, N+1)\n",
    "    fi = np.interp(xi, x, f)\n",
    "\n",
    "    \n",
    "# Initialize Lagrange polynomials on the defined grid\n",
    "lp = np.zeros((N + 1, len(x)))\n",
    "for i in range(0, len(x)):\n",
    "    for j in range(-1, N):\n",
    "        lp[j + 1, i] = lagrange2(N, j, x[i], xi)\n",
    "\n",
    "\n",
    "# Calculate interpolating polynomials by multiplying \n",
    "# Lagrange polynomials with function values at xi\n",
    "s = x * 0\n",
    "for j in range(0, N + 1):   \n",
    "    s = s + lp[j, :] * fi[j]\n",
    "\n",
    "error = np.sum((np.abs(f - s))) / np.sum(np.abs(f)) * 100\n",
    "\n",
    "# Plot results  \n",
    "plt.figure()\n",
    "plt.plot(x, s, 'k-', color='green', label='Interpolating function')\n",
    "plt.plot(x, f, 'k--', label='Original function')\n",
    "plt.plot(xi, fi, 's', label='Collocation points')\n",
    "plt.title('Relative error: %g %%' % error)\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('f(x)')\n",
    "\n",
    "if exercise == 1:\n",
    "    plt.legend(loc=\"upper center\")\n",
    "elif exercise == 2:\n",
    "    plt.xlim(-5, 5)\n",
    "    plt.legend(loc=2)\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
